<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">

	<title>UVAbstractLogger Class Reference</title>

	<link rel="stylesheet" href="../css/style.css">
	<meta name="viewport" content="initial-scale=1, maximum-scale=1.4">
	<meta name="generator" content="appledoc 2.2.1 (build 1333)">
</head>
<body class="appledoc">
	<header>
		<div class="container" class="hide-in-xcode">
			
			<h1 id="library-title">
				<a href="../index.html">IJKMediaPlayer-static </a>
			</h1>

			<p id="developer-home">
				<a href="../index.html">UCloud</a>
			</p>
			
		</div>
	</header>

	<aside>
		<div class="container">
			<nav>
				<ul id="header-buttons" role="toolbar">
					<li><a href="../index.html">Index</a></li>
<li><a href="../hierarchy.html">Hierarchy</a></li>

					<li id="on-this-page" role="navigation">
						<label>
							On This Page

							<div class="chevron">
								<div class="chevy chevron-left"></div>
								<div class="chevy chevron-right"></div>
							</div>

							<select id="jump-to">
	<option value="top">Jump To&#133;</option>
	
	<option value="overview">Overview</option>
	

	
	
	<option value="tasks">Tasks</option>
	
	

	
	
	<optgroup label="Properties">
		
		<option value="//api/name/logFormatter">logFormatter</option>
		
		<option value="//api/name/loggerQueue">loggerQueue</option>
		
		<option value="//api/name/onGlobalLoggingQueue">onGlobalLoggingQueue</option>
		
		<option value="//api/name/onInternalLoggerQueue">onInternalLoggerQueue</option>
		
	</optgroup>
	

	

	
	
</select>
						</label>
					</li>
				</ul>
			</nav>
		</div>
	</aside>

	<article>
		<div id="overview_contents" class="container">
			<div id="content">
				<main role="main">
					<h1 class="title">UVAbstractLogger Class Reference</h1>

					
					<div class="section section-specification"><table cellspacing="0"><tbody>
						<tr>
	<th>Inherits from</th>
	<td>NSObject</td>
</tr><tr>
	<th>Conforms to</th>
	<td><a href="../Protocols/UVLogger.html">UVLogger</a></td>
</tr><tr>
	<th>Declared in</th>
	<td>UVLog.h</td>
</tr>
						</tbody></table></div>
					

                    
					
					<div class="section section-overview">
						<a title="Overview" name="overview"></a>
						<h2 class="subtitle subtitle-overview">Overview</h2>
						<p>The <a href="../Protocols/UVLogger.html"><code>UVLogger</code></a> protocol specifies that an optional formatter can be added to a logger.
Most (but not all) loggers will want to support formatters.</p>

<p>However, writting getters and setters in a thread safe manner,
while still maintaining maximum speed for the logging process, is a difficult task.</p>

<p>To do it right, the implementation of the getter/setter has strict requiremenets:
- Must NOT require the <code>logMessage:</code> method to acquire a lock.
- Must NOT require the <code>logMessage:</code> method to access an atomic property (also a lock of sorts).</p>

<p>To simplify things, an abstract logger is provided that implements the getter and setter.</p>

<p>Logger implementations may simply extend this class,
and they can ACCESS THE FORMATTER VARIABLE DIRECTLY from within their <code>logMessage:</code> method!</p>
					</div>
					
					

					
					
					<div class="section section-tasks">
						<a title="Tasks" name="tasks"></a>
						

						
						

						<div class="task-list">
							<div class="section-method">
	<a name="//api/name/logFormatter" title="logFormatter"></a>
	<h3 class="method-title"><code><a href="#//api/name/logFormatter">&nbsp;&nbsp;logFormatter</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Formatters may optionally be added to any logger.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>@property (nonatomic, strong, nullable) id&lt;UVLogFormatter&gt; logFormatter</code></div>

		    
			

			

			

			
			<div class="method-subsection discussion-section">
				<h4 class="method-subtitle">Discussion</h4>
				<p>If no formatter is set, the logger simply logs the message as it is given in logMessage,
or it may use its own built in formatting style.</p>
			</div>
			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">UVLog.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/loggerQueue" title="loggerQueue"></a>
	<h3 class="method-title"><code><a href="#//api/name/loggerQueue">&nbsp;&nbsp;loggerQueue</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Each logger is executed concurrently with respect to the other loggers.
Thus, a dedicated dispatch queue is used for each logger.
Logger implementations may optionally choose to provide their own dispatch queue.</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>@property (nonatomic, DISPATCH_QUEUE_REFERENCE_TYPE) dispatch_queue_t loggerQueue</code></div>

		    
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">UVLog.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/onGlobalLoggingQueue" title="onGlobalLoggingQueue"></a>
	<h3 class="method-title"><code><a href="#//api/name/onGlobalLoggingQueue">&nbsp;&nbsp;onGlobalLoggingQueue</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Return YES if the current logger uses a global queue for logging</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>@property (nonatomic, readonly, getter=isOnGlobalLoggingQueue) BOOL onGlobalLoggingQueue</code></div>

		    
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">UVLog.h</code></p>
			</div>
			
			
		</div>
	</div>
</div><div class="section-method">
	<a name="//api/name/onInternalLoggerQueue" title="onInternalLoggerQueue"></a>
	<h3 class="method-title"><code><a href="#//api/name/onInternalLoggerQueue">&nbsp;&nbsp;onInternalLoggerQueue</a></code>
</h3>

	<div class="method-info">
		<div class="pointy-thing"></div>

		<div class="method-info-container">
			
			
			<div class="method-subsection brief-description">
				<p>Return YES if the current logger uses the internal designated queue for logging</p>
			</div>
			
		    

			<div class="method-subsection method-declaration"><code>@property (nonatomic, readonly, getter=isOnInternalLoggerQueue) BOOL onInternalLoggerQueue</code></div>

		    
			

			

			

			

			

			

			
			<div class="method-subsection declared-in-section">
				<h4 class="method-subtitle">Declared In</h4>
				<p><code class="declared-in-ref">UVLog.h</code></p>
			</div>
			
			
		</div>
	</div>
</div>
						</div>
						
					</div>
					
					

                    
                    
          
				</main>

				<footer>
					<div class="footer-copyright">
						
						<p class="copyright">Copyright &copy; 2017 UCloud. All rights reserved. Updated: 2017-04-18</p>
						
						
						<p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1333)</a>.</p>
						
					</div>
				</footer>
			</div>
		</div>
	</article>

	<script src="../js/script.js"></script>
</body>
</html>